package com.dankegongyu.lib.common.util;

/**
 * Created by Admin on 2017/11/7.
 */

public class BankUtil {

    /**
     * 校验银行卡号
     *
     * @param data 卡号
     * @return true 为正确 false 为错误
     */
    public static boolean isCorrectBankCard(String data) {
        if (data == null || data.length() <= 0) {
            return false;
        }

        // if (data.length() < 16 || data.length() > 19) {
        // return false;
        // }

        // 62,4,51,52,53,54,55
//        if (!data.startsWith("62") && //
//                !data.startsWith("4") && //
//                !data.startsWith("51") && //
//                !data.startsWith("52") && //
//                !data.startsWith("53") && //
//                !data.startsWith("54") && //
//                !data.startsWith("55") && //
//                !data.startsWith("955")) {
//            return false;
//        }

        StringBuilder sb = new StringBuilder(data);
        String input = sb.reverse().toString();

        if (input.length() <= 0) {
            return false;
        }
        // 奇数
        int sumOdd = 0;
        // 偶数
        int sumEven = 0;

        int length = input.length();
        int[] inputArray = new int[length];

        String regX = "[0-9]"; // 正则匹配数字

        for (int i = 1; i <= length; i++) {
            int index = (i - 1);

            String result = input.substring(index, (index + 1));
            if (result.length() <= 0 || "".equals(result.trim()) || !result.matches(regX)) {
                return false;
            }
            inputArray[index] = Integer.parseInt(result);
            if (i % 2 == 0) {
                inputArray[index] = inputArray[index] * 2;
                if (inputArray[index] >= 10) {
                    inputArray[index] = inputArray[index] - 9;
                }
                sumEven += inputArray[index];
            } else {
                sumOdd += inputArray[index];
            }

            // System.out.println("==" + (i) + ">" + inputArray[index]);
        }
        if ((sumOdd + sumEven) % 10 == 0) {
            return true;
        } else {
            return false;
        }
    }
}
